package com.zn.znch.yhp.znchv2.service;


import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zn.znch.yhp.znchv2.common.HttpUtils;
import com.zn.znch.yhp.znchv2.common.PointDate;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.util.EntityUtils;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.io.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;


@Slf4j
@Component
public class DCService {
    ExecutorService executorService = Executors.newFixedThreadPool(20);
    public static String path = "D:/temp/znch/dc/data";
    public static String configPath = "D:/temp/znch/dc/config/config.properties";
    public static String configTime = "D:/temp/znch/dc/config/time.properties";
//    public static String path = "/home/zd/znch/dc/data";
//    public static String configPath = "/home/zd/znch/dc/config/config.properties";
//    public static String configTime = "/home/zd/znch/dc/config/time.properties";

    public static int maxLine = 86400;
    public static String F_S = "FUHE_START";
    public static String F_E = "FUHE_END";
    public static String N_S = "NOFUHE_START";
    public static String N_E = "NOFUHE_END";
    public static String SYS_FLAG = "0";

    public static int FUHE_START = 8;
    public static int FUHE_END = 6;
    public static int NOFUHE_START = 2;
    public static int NOFUHE_END = 1;

    private static String URL = "http://132.0.2.36:8721";
    private static String findPoints_addr = "/macs/v1/realtime/read/findPoints";
    private static String writePoint_addr = "/macs/v1/realtime/write/writePoints";
    //private static String TOKEN = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjcmVhdG9yIjoiYTYwMzkyZjgtMzhhOS0xMWVkLWE5YjgtNTI1NDAwNDNmZDM3Iiwic291cmNlIjoidGhpcmQiLCJ0eXBlIjoiYXBwIiwiYWNjb3VudCI6InpuY2giLCJzaWQiOiIifQ.SZt9gw_fKO3-caOlirDTLI3UH48bikBmhy54kfOlpIM";
    private static String TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0aWQiOm51bGwsInNpZCI6IiIsImFjY291bnQiOiJaTkNIIiwidHlwZSI6ImFwcCIsInNvdXJjZSI6InRoaXJkIiwiY3JlYXRvciI6ImIxOTA5MDVhLTM5NTAtMTFlZC04YjJhLTUyNTQwMGQ2ZjA3MSJ9.iMUMONae4FPS8NCMPjeYfa_Lnery6Ssg81WszdC_1TM";

    @Scheduled(cron = "0/20 * * * * ?")
    public void performTask() {
        log.info("更新短吹数据任务开始…………");
        HashMap headers = new HashMap<String, String>();
        headers.put("content-type", "application/json");
        headers.put("token", TOKEN);

        HashMap<String, String> map = null;
        String responseString = new String();
        try {
            String body = getTagString();
            HttpResponse response = HttpUtils.doPost(URL, findPoints_addr, headers, null, body);
            HttpEntity entity = response.getEntity();
            //返回结果
            map = new HashMap<>();
            if (entity != null) {
                responseString = EntityUtils.toString(entity);
                ObjectMapper objectMapper = new ObjectMapper();
                JsonNode jsonNode = objectMapper.readTree(responseString);
                JsonNode dataValue = jsonNode.get("data");
                for (int i = 0; i < dataValue.size(); i++) {
                    JsonNode node = dataValue.get(i);
                    String tag = node.get("tag").asText().toString();
                    JsonNode item = node.get("item");
                    String value = (item.get("AV") != null ? item.get("AV") : item.get("DV")).toString();
                    map.put(tag, value);
                }
            }
        } catch (Exception e) {
            log.error("短吹请求外部接口异常，responseString :{}", responseString);
            log.error("短吹请求外部接口失败：e:{}", e.getMessage());
            return;
        }
        log.info("短吹元数据请求外部接口，responseString :{}", responseString);
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
        String sysTime = now.format(formatter);
        //读取
        File directory = new File(path);
        if (!directory.exists()) {
            directory.mkdirs();
        }
        Set<String> fileName = PointDate.biwen_duihui.keySet();
        //读取配置文件
        //参数格式：10HAD70CT:a,b,c,标志2（拟合效果好）/3（拟合效果不好），系数alfa
        Properties properties = null;
        try {
            properties = new Properties();
            FileInputStream fis = new FileInputStream(configPath);
            FileInputStream fisTime = new FileInputStream(configTime);
            properties.load(fis);
            properties.load(fisTime);
        } catch (Exception e) {
            log.error("短吹配置文件加载失败！Exception:{}", e.getMessage());
            return;
        }
        FUHE_START = new Integer(properties.get(F_S).toString());
        FUHE_END = new Integer(properties.get(F_E).toString());
        NOFUHE_START = new Integer(properties.get(N_S).toString());
        NOFUHE_END = new Integer(properties.get(N_E).toString());

        List<Callable<String>> tasks = new ArrayList<>();
        for (String name : fileName) {
            String fuhe = map.get("AMECOINFWQ");
            String biwen = map.get(name);
            String chuihui = map.get(PointDate.biwen_duihui.get(name));
            if(null ==  fuhe || null == biwen || fuhe.isEmpty() || biwen.isEmpty()){
                continue;
            }
            // 获取属性值
            String propertyValue = properties.getProperty(name);
            String[] params = new String[5];
            if (propertyValue != null) {
                params = propertyValue.split(",");
            } else {
                params[0] = "0";
                params[1] = "0";
                params[2] = "0";
                params[3] = "1";
                params[4] = "0";
            }
            DCTask task =new DCTask( directory,  name,  params,  sysTime,  fuhe,  biwen,  chuihui, FUHE_START, FUHE_END, NOFUHE_START, NOFUHE_END, maxLine);
            tasks.add(task);
        }

        HashMap<String,String> result = new HashMap();
        try {
            List<Future<String>> futures = executorService.invokeAll(tasks);
            for (Future<String> future : futures) {
                String[] s = future.get().split("_");
                result.put(s[0],s[1]);
            }
        } catch (Exception e) {
            log.info("短吹批量任务结果获取失败：directory:{};Exception:{}; ",directory,e.getMessage());
            return;
        }

        //回写吹灰
        writePoint(result);
        //记录吹灰记录
        writeChuihuiNode(result,fileName,sysTime);
    }

    public static void writePoint(HashMap<String,String> result){
        HashMap headers = new HashMap<String, String>();
        headers.put("content-type", "application/json");
        headers.put("token", TOKEN);
        String writePoint_body = getWritePoint();
        for (Map.Entry<String,String> entry:result.entrySet()) {
            String name = entry.getKey();
            String chuihui = entry.getValue();
            String pointDI= PointDate.biwen_duihui.get(name);
            pointDI = pointDI.replace("ZO","")+"_ICS_DI";
            writePoint_body = writePoint_body.replace(pointDI,chuihui);
        }
        if(SYS_FLAG.equals("1")){
            SYS_FLAG = "0";
        }else{
            SYS_FLAG = "1";
        }
        writePoint_body = writePoint_body.replace("SYS_FLAG",SYS_FLAG);

        log.info("短吹吹灰需求下发，请求参数："+writePoint_body);
        String responseString = null;
        try {
            HttpResponse writeResponse = HttpUtils.doPost(URL, writePoint_addr, headers, null, writePoint_body);
            HttpEntity entity = writeResponse.getEntity();
            responseString = EntityUtils.toString(entity);
        } catch (Exception e) {
            log.info("短吹吹灰需求下发失败："+e);
            return;
        }
        log.info(" DCService success 短吹吹灰需求下发结果："+responseString.toString());
    }

    public static void writeChuihuiNode(HashMap<String,String> result,Set<String> fileName,String sysTime){
        try {
            String filePath = "D:\\temp\\znch\\dc\\chuihui.csv";
            File file = new File(filePath);
            List<String> data = new ArrayList<>();
            if (file.exists()) {
                //读取历史数据
                FileReader fr = new FileReader(filePath);
                BufferedReader br = new BufferedReader(fr);
                String line = br.readLine();
                while (line != null) {
                    data.add(line);
                    line = br.readLine();
                }
                //删除原文件
                file.delete();
            }
            if (data.size() > maxLine) {
                data.remove(0);
            }
            FileWriter writer = new FileWriter(filePath);
            for (int i = 0; i < data.size(); i++) {
                writer.append(data.get(i));
                writer.append("\n");
            }
            StringBuffer sb = new StringBuffer();
            sb.append(sysTime);
            for (String key : fileName) {
                sb.append(",").append(key).append("_").append(result.get(key));
            }
            sb.append("\n");
            writer.append(sb.toString());
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private String getTagString() {
        return "{'tags': [{'items': ['AV'], 'namespace': 'unit02', 'tag': 'AMECOINFWQ'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT601'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT602'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT603'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT604'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT605'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT606'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT607'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT608'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT609'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT610'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT611'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT612'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT613'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT614'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT615'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT616'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT617'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT618'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT619'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT620'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT621'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT622'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT623'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT624'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT625'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT626'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT627'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT628'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT629'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT630'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT631'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT632'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT633'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT634'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT635'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT636'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT637'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT638'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT639'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT640'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT641'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT642'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT643'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT644'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT645'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT646'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT647'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT648'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT649'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT650'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT651'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT652'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT653'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT654'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT655'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT656'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT657'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT658'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT659'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT660'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT661'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT662'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT663'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT664'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT665'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT666'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT667'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT668'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT669'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT670'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT671'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT672'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT673'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT674'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT675'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT676'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT677'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT678'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT679'},{'items': ['AV'], 'namespace': 'unit02', 'tag': '20HAD70CT680'},{'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT001ZO'},{'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT002ZO'},{'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT003ZO'},{'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT004ZO'},{'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT009ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT010ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT011ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT012ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT017ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT018ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT019ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT020ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT025ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT026ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT027ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT028ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT033ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT034ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT035ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT036ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT005ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT006ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT007ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT008ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT013ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT014ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT015ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT016ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT021ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT022ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT023ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT024ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT029ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT030ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT031ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT032ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT037ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT038ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT039ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB14AT040ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT001ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT002ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT003ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT004ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT009ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT010ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT011ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT012ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT017ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT018ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT019ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT020ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT025ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT026ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT027ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT028ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT033ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT034ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT035ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT036ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT005ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT006ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT007ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT008ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT013ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT014ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT015ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT016ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT021ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT022ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT023ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT024ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT029ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT030ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT031ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT032ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT037ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT038ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT039ZO'}, {'items': ['DV'], 'namespace': 'unit02', 'tag': 'HCB13AT040ZO'}]}";
    }

    private static String getWritePoint(){
        return "[{'items': [{'item': 'DI','value': HCB14AT001_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT001_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT002_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT002_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT003_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT003_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT004_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT004_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT009_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT009_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT010_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT010_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT011_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT011_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT012_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT012_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT017_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT017_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT018_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT018_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT019_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT019_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT020_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT020_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT025_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT025_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT026_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT026_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT027_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT027_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT028_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT028_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT033_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT033_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT034_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT034_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT035_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT035_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT036_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT036_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT005_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT005_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT006_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT006_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT007_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT007_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT008_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT008_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT013_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT013_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT014_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT014_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT015_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT015_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT016_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT016_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT021_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT021_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT022_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT022_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT023_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT023_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT024_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT024_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT029_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT029_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT030_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT030_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT031_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT031_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT032_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT032_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT037_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT037_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT038_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT038_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT039_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT039_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB14AT040_ICS_DI}],'namespace':'unit02','tag': 'HCB14AT040_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT001_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT001_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT002_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT002_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT003_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT003_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT004_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT004_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT009_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT009_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT010_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT010_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT011_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT011_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT012_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT012_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT017_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT017_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT018_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT018_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT019_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT019_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT020_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT020_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT025_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT025_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT026_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT026_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT027_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT027_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT028_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT028_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT033_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT033_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT034_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT034_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT035_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT035_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT036_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT036_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT005_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT005_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT006_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT006_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT007_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT007_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT008_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT008_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT013_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT013_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT014_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT014_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT015_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT015_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT016_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT016_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT021_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT021_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT022_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT022_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT023_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT023_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT024_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT024_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT029_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT029_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT030_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT030_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT031_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT031_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT032_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT032_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT037_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT037_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT038_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT038_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT039_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT039_ICS'},\n" +
                "{'items': [{'item': 'DI','value': HCB13AT040_ICS_DI}],'namespace':'unit02','tag': 'HCB13AT040_ICS'},\n" +
                "{'items': [{'item': 'DI','value': SYS_FLAG}],'namespace':'unit02','tag': 'HCB11AT001_ICS_XT01'}]";
    }




    public static void main(String[] args) throws Exception {
        HashMap headers = new HashMap<String, String>();
        headers.put("content-type", "application/json");
        headers.put("token", TOKEN);
        String writePoint_body = "[{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT001_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT002_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT003_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT004_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT009_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT010_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT011_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT012_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT017_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT018_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT019_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT020_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT025_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT026_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT027_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT028_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT033_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT034_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT035_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT036_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT005_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT006_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT007_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT008_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT013_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT014_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT015_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT016_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT021_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT022_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT023_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT024_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT029_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT030_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT031_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT032_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT037_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT038_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT039_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB14AT040_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT001_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT002_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT003_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT004_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT009_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT010_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT011_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT012_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT017_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT018_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT019_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT020_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT025_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT026_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT027_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT028_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT033_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT034_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT035_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT036_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT005_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT006_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT007_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT008_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT013_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT014_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT015_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT016_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT021_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT022_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT023_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT024_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT029_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT030_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT031_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT032_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT037_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT038_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT039_ICS'},\n" +
                "{'items': [{'item': 'DI','value': 0}],'namespace':'unit02','tag': 'HCB13AT040_ICS'}]";
        log.info("短吹吹灰需求下发，请求参数："+writePoint_body);
        HttpResponse writeResponse = HttpUtils.doPost(URL, writePoint_addr, headers, null, writePoint_body);
        HttpEntity entity = writeResponse.getEntity();
        String responseString = EntityUtils.toString(entity);
        log.info("短吹吹灰需求下发结果："+responseString.toString());
    }
}
